package com.mt.api.modules.domain.wx;

import com.alibaba.fastjson.JSONObject;
import lombok.Data;

import java.util.Date;

/**
 * @author qurenneng
 */
@Data
public class WxDecryptNotifyContent {

    /**
     * 直连商户申请的公众号或移动应用appid。
     */
    private String appid;

    /**
     * 商户的商户号，由微信支付生成并下发。
     */
    private String mchid;
    /**
     * 微信支付订单号，存到payment表的serial_number
     */
    private String transaction_id;
    /**
     * paymentId
     */
    private String out_trade_no;
    /**
     * 支付完成时间，例如：2018-06-08T10:34:56+08:00
     */
    private Date success_time;
    /**
     * 交易状态，枚举值：
     * SUCCESS：支付成功
     * REFUND：转入退款
     * NOTPAY：未支付
     * CLOSED：已关闭
     * REVOKED：已撤销（付款码支付）
     * USERPAYING：用户支付中（付款码支付）
     * PAYERROR：支付失败(其他原因，如银行返回失败)
     */
    private String trade_state;
    /**
     * 交易状态描述
     */
    private String trade_state_desc;

    /**
     * 交易类型，枚举值：
     * JSAPI：公众号支付
     * NATIVE：扫码支付
     * APP：APP支付
     * MICROPAY：付款码支付
     * MWEB：H5支付
     * FACEPAY：刷脸支付
     */
    private String trade_type;
    /**
     * 银行类型，采用字符串类型的银行标识
     */
    private String bank_type;
    /**
     * 附加数据，在查询API和支付通知中原样返回，可作为自定义参数使用，实际情况下只有支付完成状态才会返回该字段
     */
    private String attach;
    /**
     * 支付者信息
     */
    private Payer payer;
    /**
     * 支付场景信息描述
     */
    private SceneInfo scene_info;
    /**
     * 优惠功能，享受优惠时返回该字段。
     */
    private JSONObject promotion_detail;

    /**
     * 订单金额
     */
    private Amount amount;

    @Data
    public static class Amount {
        private int total;
        private int payer_total;
        private String currency;
        private String payer_currency;
    }

    @Data
    public static class Payer {
        private String openid;
    }

    @Data
    public static class SceneInfo {
        private String device_id;
    }

}